﻿using DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Descripción breve de ModPersona
/// </summary>
public class ModPersona
{
    private lqDataContext data;
	public ModPersona()
	{
        data = new lqDataContext();
	}
    public List<Tbl_Personas> listAllPersona()
    {
        var person = from per in data.Tbl_Personas
                   where per.iEstado_fl == true
                   select per;
        return person.ToList();
    }
    public List<Tbl_Cargos> listAllCargos()
    {
        var person = from per in data.Tbl_Cargos
                     where per.iEstado_fl == true
                     select per;
        return person.ToList();
    }
    public List<Tbl_Roles> listAllroles()
    {
        var person = from per in data.Tbl_Roles
                     where per.iEstado_fl == true
                     select per;
        return person.ToList();
    }
    public Tbl_Personas getPersona(int id)
    {
        var person = from per in data.Tbl_Personas
                     where per.iEstado_fl == true && per.iPersona_id == id
                     select per;
        return person.ToList().ElementAt(0);
    }
    public Tbl_Cargos getCargo(int id)
    {
        var person = from per in data.Tbl_Cargos
                     where per.iEstado_fl == true && per.iCargo_id == id
                     select per;
        return person.ToList().ElementAt(0);
    }
    public List<Tbl_Usuarios> listAllUsuario()
    {
        var user = from per in data.Tbl_Usuarios
                     where per.iEstado_fl == true
                     select per;
        List<Tbl_Usuarios> nueva = user.ToList();
        for (int i = 0; i < nueva.Count(); i++)
        {
            nueva.ElementAt(i).sPassword = "0";
        }
        return nueva;
    }
    public Tbl_Usuarios getUsuario(int id)
    {
        var user = from lg in data.Tbl_Usuarios
                   where lg.iUsuario_id==id && lg.iEstado_fl==true
                   select lg;
        return user.ToList().ElementAt(0);
    }
    public List<Tbl_Personas> listpersonasinUsuario()
    {
        var user = from lg in data.Tbl_Personas
                   where lg.iEstado_fl == true && !(from aux in data.Tbl_Usuarios
                                                    select aux.iPersona_id).Contains(lg.iPersona_id)
                   select lg;
        return user.ToList();
    }

    public void insertPersona(Tbl_Personas p)
    {
        data.Tbl_Personas.InsertOnSubmit(p);
        try
        {
            data.SubmitChanges();
            Console.WriteLine("inserto!!!");
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
        }
    }
    public void updatePersona(Tbl_Personas p)
    {
        try
        {
            Tbl_Personas update = data.Tbl_Personas.Single(x => x.iPersona_id == p.iPersona_id);
            if (update.iConcurrencia == p.iConcurrencia)
            {
                update.sNombre = p.sNombre;
                update.iCarnetIdentidad = p.iCarnetIdentidad;
                update.sApellido_paterno = p.sApellido_paterno;
                update.sApellido_Materno = p.sApellido_Materno;
                update.sTelefono_Contacto = p.sTelefono_Contacto;
                update.iEstado_fl = p.iEstado_fl;
                update.iConcurrencia = p.iConcurrencia + 1;
                update.iCargo_id = p.iCargo_id;
                data.SubmitChanges();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
        }
    }

    public void insertCargo(Tbl_Cargos c)
    {
        data.Tbl_Cargos.InsertOnSubmit(c);
        try
        {
            data.SubmitChanges();
            Console.WriteLine("inserto!!!");
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
        }
    }

    public bool deleteCargos(Tbl_Cargos p)
    {
        var checkpersona = from per in data.Tbl_Personas
                       where per.iEstado_fl == true && per.iCargo_id==p.iCargo_id
                       select per;
        if (checkpersona.ToList().Count() > 0)
        {
            return false;
        }
        try
        {
            Tbl_Cargos update = data.Tbl_Cargos.Single (x => x.iCargo_id == p.iCargo_id);
            if (update.iConcurrencia == p.iConcurrencia)
            {
                update.iEstado_fl = false;
                update.iConcurrencia = p.iConcurrencia + 1;
                data.SubmitChanges();
                return true;
            }
            else
            {
                return false;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
        }
        return false;
    }
    public void insertUsuario(Tbl_Usuarios p)
    {
        data.Tbl_Usuarios.InsertOnSubmit(p);
        try
        {
            data.SubmitChanges();
            Console.WriteLine("inserto!!!");
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
        }
    }
    public void updateUsuario(Tbl_Usuarios p)
    {
        try
        {
        Tbl_Usuarios update = data.Tbl_Usuarios.Single(x => x.iUsuario_id == p.iUsuario_id);
        if (update.iConcurrencia == p.iConcurrencia)
            {
                update.sNombreUsuario = p.sNombreUsuario;
                update.sPassword = p.sPassword;
                update.iPersona_id = p.iPersona_id;
                update.iRol_id = p.iRol_id;
                update.iEstado_fl = p.iEstado_fl;
                update.iConcurrencia = p.iConcurrencia + 1;
                data.SubmitChanges();
            }
            else
            {
                return;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
        }
    }
    public void deleteUsuario(Tbl_Usuarios p)
    {
        try
        {
            Tbl_Usuarios update = data.Tbl_Usuarios.Single(x => x.iUsuario_id == p.iUsuario_id);
            if (update.iConcurrencia == p.iConcurrencia)
            {
                update.iEstado_fl = false;
                update.iConcurrencia = p.iConcurrencia + 1;
                data.SubmitChanges();
            }
            else
            {
                return;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
        }
    }
    public Tbl_Roles getRol(int id)
    {
        var person = from per in data.Tbl_Roles
                     where per.iEstado_fl == true && per.iRol_id == id
                     select per;
        return person.ToList().ElementAt(0);
    }
    public bool deletePersona(Tbl_Personas p)
    {
        var checkuser = from user in data.Tbl_Usuarios
                     where user.iEstado_fl == true && user.iPersona_id==p.iPersona_id
                     select user;
        if (checkuser.ToList().Count > 0) {
            return false;
        }
        var checkencargado = from enc in data.Tbl_ActivoFijos
                             where enc.iEstado_fl == true && enc.Encargado == p.iPersona_id
                             select enc;
        if (checkencargado.ToList().Count > 0)
        {
            return false;
        }
        try{
         Tbl_Personas update = data.Tbl_Personas.Single(x => x.iPersona_id == p.iPersona_id);
            if (update.iConcurrencia == p.iConcurrencia)
            {
                update.iEstado_fl = false;
                update.iConcurrencia = p.iConcurrencia + 1;
                data.SubmitChanges();
                return true;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            data.SubmitChanges();
             return false;
        }
        return false;

    }

}